/*
.IDENTIFICATION constel.c
.LANGUAGE       C
.AUTHOR         Francois Ochsenbein [CDS]  francois@astro.u-strasbg.fr
.ENVIRONMENT    Astronomical Catalogues (#6042), see
		http://vizier.u-strasbg.fr/viz-bin/VizieR?-source=6042
.KEYWORDS       Constellations
.VERSION  1.0   17-Jul-2001
.COMMENTS       Find out all boundaries of a Constellation.
		Argument to main may be a position (dec.deg. Eq=1875), or
		a constellation name.
   With argument as a constellation name, the 'graph' GNU plotting program
   can be used to generate the area covered by the constellation, e.g.
   constel -p Cyg | graph -T ps -q 1.0 -L Cyg -x 360 0 -y -90 90
*/

#include <stdio.h>
#include <ctype.h>
double atof();

#define ITEMS(a) (sizeof(a) / sizeof(a[0]))
typedef struct row
{
    float ral, rau, del;
    char cst[4];
} ROW;

/* The Constellation Boundaries as extracted from Cat.#6042,
   paper by N.G. Roman, 1987PASP...99..695R
*/
static ROW data[] = {
    { 0, 360, 90, "" }, /* North Pole */
    { 0.0000, 360.0000, 88.0000, "UMi" },
    { 120.0000, 217.5000, 86.5000, "UMi" },
    { 315.0000, 345.0000, 86.1667, "UMi" },
    { 270.0000, 315.0000, 86.0000, "UMi" },
    { 0.0000, 120.0000, 85.0000, "Cep" },
    { 137.5000, 160.0000, 82.0000, "Cam" },
    { 0.0000, 75.0000, 80.0000, "Cep" },
    { 160.0000, 217.5000, 80.0000, "Cam" },
    { 262.5000, 270.0000, 80.0000, "UMi" },
    { 302.5000, 315.0000, 80.0000, "Dra" },
    { 0.0000, 52.6250, 77.0000, "Cep" },
    { 172.5000, 203.7500, 77.0000, "Cam" },
    { 248.0000, 262.5000, 75.0000, "UMi" },
    { 302.5000, 310.0000, 75.0000, "Cep" },
    { 119.5000, 137.5000, 73.5000, "Cam" },
    { 137.5000, 170.0000, 73.5000, "Dra" },
	{ 195.0000, 248.0000, 70.0000, "UMi" },
    { 46.5000, 51.2500, 68.0000, "Cas" },
    { 306.2500, 310.0000, 67.0000, "Dra" },
    { 170.0000, 180.0000, 66.5000, "Dra" },
    { 0.0000, 5.0000, 66.0000, "Cep" },
    { 210.0000, 235.0000, 66.0000, "UMi" },
    { 353.7500, 360.0000, 66.0000, "Cep" },
    { 180.0000, 202.5000, 64.0000, "Dra" },
    { 202.5000, 216.2500, 63.0000, "Dra" },
    { 347.5000, 353.7500, 63.0000, "Cep" },
    { 91.5000, 105.0000, 62.0000, "Cam" },
    { 300.0000, 306.2500, 61.5000, "Dra" },
    { 308.0500, 309.0000, 60.9167, "Cep" },
    { 105.0000, 119.5000, 60.0000, "Cam" },
    { 119.5000, 126.2500, 60.0000, "UMa" },
    { 296.5000, 300.0000, 59.5000, "Dra" },
    { 300.0000, 308.0500, 59.5000, "Cep" },
    { 343.0000, 347.5000, 59.0833, "Cep" },
    { 0.0000, 36.5000, 58.5000, "Cas" },
    { 291.2500, 296.5000, 58.0000, "Dra" },
    { 25.5000, 28.6250, 57.5000, "Cas" },
    { 36.5000, 46.5000, 57.0000, "Cas" },
    { 46.5000, 47.5000, 57.0000, "Cam" },
    { 334.7500, 343.0000, 56.2500, "Cep" },
    { 75.0000, 91.5000, 56.0000, "Cam" },
    { 210.5000, 216.2500, 55.5000, "UMa" },
    { 216.2500, 291.2500, 55.5000, "Dra" },
    { 47.5000, 50.0000, 55.0000, "Cam" },
	{ 332.0000, 334.7500, 55.0000, "Cep" },
    { 309.0000, 329.5000, 54.8333, "Cep" },
    { 0.0000, 25.5000, 54.0000, "Cas" },
    { 91.5000, 97.5000, 54.0000, "Lyn" },
    { 181.2500, 202.5000, 53.0000, "UMa" },
    { 228.7500, 236.2500, 53.0000, "Dra" },
    { 329.5000, 332.0000, 52.7500, "Cep" },
    { 50.0000, 75.0000, 52.5000, "Cam" },
    { 343.0000, 350.0000, 52.5000, "Cas" },
    { 236.2500, 255.0000, 51.5000, "Dra" },
    { 30.6250, 37.7500, 50.5000, "Per" },
    { 255.0000, 273.5000, 50.5000, "Dra" },
    { 0.0000, 20.5000, 50.0000, "Cas" },
    { 20.5000, 25.0000, 50.0000, "Per" },
    { 97.5000, 102.0000, 50.0000, "Lyn" },
    { 350.0000, 360.0000, 50.0000, "Cas" },
    { 202.5000, 210.5000, 48.5000, "UMa" },
    { 0.0000, 16.7500, 48.0000, "Cas" },
    { 353.7500, 360.0000, 48.0000, "Cas" },
    { 272.6250, 273.5000, 47.5000, "Her" },
    { 273.5000, 286.2500, 47.5000, "Dra" },
    { 286.2500, 287.5000, 47.5000, "Cyg" },
    { 25.0000, 30.6250, 47.0000, "Per" },
    { 126.2500, 137.5000, 47.0000, "UMa" },
    { 2.5000, 13.0000, 46.0000, "Cas" },
    { 180.0000, 181.2500, 45.0000, "UMa" },
    { 102.0000, 110.5000, 44.5000, "Lyn" },
    { 328.6250, 329.5000, 44.0000, "Cyg" },
	{ 328.1250, 328.6250, 43.7500, "Cyg" },
    { 287.5000, 291.0000, 43.5000, "Cyg" },
    { 137.5000, 152.5000, 42.0000, "UMa" },
    { 152.5000, 161.7500, 40.0000, "UMa" },
    { 231.5000, 236.2500, 40.0000, "Boo" },
    { 236.2500, 245.0000, 40.0000, "Her" },
    { 138.7500, 143.7500, 39.7500, "Lyn" },
    { 0.0000, 37.7500, 36.7500, "And" },
    { 37.7500, 38.5000, 36.7500, "Per" },
    { 290.3750, 291.0000, 36.5000, "Lyr" },
    { 67.5000, 70.3750, 36.0000, "Per" },
    { 326.0000, 328.1250, 36.0000, "Cyg" },
    { 328.1250, 330.0000, 36.0000, "Lac" },
    { 98.0000, 110.5000, 35.5000, "Aur" },
    { 110.5000, 116.2500, 35.5000, "Lyn" },
    { 0.0000, 30.0000, 35.0000, "And" },
    { 330.0000, 342.2500, 35.0000, "Lac" },
    { 342.2500, 343.0000, 34.5000, "Lac" },
    { 343.0000, 352.5000, 34.5000, "And" },
    { 38.5000, 40.7500, 34.0000, "Per" },
    { 161.7500, 165.0000, 34.0000, "UMa" },
    { 180.0000, 185.0000, 34.0000, "CVn" },
    { 116.2500, 138.7500, 33.5000, "Lyn" },
    { 138.7500, 148.2500, 33.5000, "LMi" },
    { 10.7500, 21.1250, 33.0000, "And" },
    { 227.7500, 231.5000, 33.0000, "Boo" },
    { 352.5000, 356.2500, 32.0833, "And" },
    { 185.0000, 198.7500, 32.0000, "CVn" },
	{ 356.2500, 360.0000, 31.3333, "And" },
    { 209.3750, 210.5000, 30.7500, "CVn" },
    { 36.2500, 40.7500, 30.6667, "Tri" },
    { 40.7500, 67.5000, 30.6667, "Per" },
    { 67.5000, 71.2500, 30.0000, "Aur" },
    { 272.6250, 290.3750, 30.0000, "Lyr" },
    { 165.0000, 180.0000, 29.0000, "UMa" },
    { 295.0000, 313.7500, 29.0000, "Cyg" },
    { 71.2500, 88.2500, 28.5000, "Aur" },
    { 148.2500, 157.5000, 28.5000, "LMi" },
    { 198.7500, 209.3750, 28.5000, "CVn" },
    { 0.0000, 1.0000, 28.0000, "And" },
    { 21.1250, 25.0000, 28.0000, "Tri" },
    { 88.2500, 98.0000, 28.0000, "Aur" },
    { 118.2500, 120.0000, 28.0000, "Gem" },
    { 313.7500, 326.0000, 28.0000, "Cyg" },
    { 288.8750, 295.0000, 27.5000, "Cyg" },
    { 28.7500, 36.2500, 27.2500, "Tri" },
    { 242.5000, 245.0000, 27.0000, "CrB" },
    { 226.2500, 227.7500, 26.0000, "Boo" },
    { 227.7500, 242.5000, 26.0000, "CrB" },
    { 275.5000, 283.0000, 26.0000, "Lyr" },
    { 161.2500, 165.0000, 25.5000, "LMi" },
    { 283.0000, 288.8750, 25.5000, "Lyr" },
    { 25.0000, 28.7500, 25.0000, "Tri" },
    { 10.7500, 12.7500, 23.7500, "Psc" },
    { 157.5000, 161.2500, 23.5000, "LMi" },
    { 318.7500, 321.2500, 23.5000, "Vul" },
	{ 85.5000, 88.2500, 22.8333, "Tau" },
    { 1.0000, 2.1250, 22.0000, "And" },
    { 238.7500, 240.5000, 22.0000, "Ser" },
    { 88.2500, 93.2500, 21.5000, "Gem" },
    { 297.5000, 303.7500, 21.2500, "Vul" },
    { 283.0000, 288.7500, 21.0833, "Vul" },
    { 2.1250, 12.7500, 21.0000, "And" },
    { 303.7500, 308.5000, 20.5000, "Vul" },
    { 117.1250, 118.2500, 20.0000, "Gem" },
    { 308.5000, 318.7500, 19.5000, "Vul" },
    { 288.7500, 297.5000, 19.1667, "Vul" },
    { 49.2500, 50.5000, 19.0000, "Ari" },
    { 283.0000, 285.0000, 18.5000, "Sge" },
    { 85.5000, 86.5000, 18.0000, "Ori" },
    { 93.2500, 94.6250, 17.5000, "Gem" },
    { 285.0000, 297.5000, 16.1667, "Sge" },
    { 74.5000, 80.0000, 16.0000, "Tau" },
    { 238.7500, 241.2500, 16.0000, "Her" },
    { 297.5000, 303.7500, 15.7500, "Sge" },
    { 69.2500, 74.5000, 15.5000, "Tau" },
    { 80.0000, 84.0000, 15.5000, "Tau" },
    { 192.5000, 202.5000, 15.0000, "Com" },
    { 258.7500, 273.7500, 14.3333, "Her" },
    { 178.0000, 192.5000, 14.0000, "Com" },
    { 112.5000, 117.1250, 13.5000, "Gem" },
    { 251.2500, 258.7500, 12.8333, "Her" },
    { 0.0000, 2.1250, 12.5000, "Peg" },
    { 84.0000, 86.5000, 12.5000, "Tau" },
	{ 105.0000, 112.5000, 12.5000, "Gem" },
    { 316.7500, 320.0000, 12.5000, "Peg" },
    { 94.6250, 104.0000, 12.0000, "Gem" },
    { 273.7500, 283.0000, 12.0000, "Her" },
    { 313.1250, 315.7500, 11.8333, "Del" },
    { 315.7500, 316.7500, 11.8333, "Peg" },
    { 172.7500, 178.0000, 11.0000, "Leo" },
    { 93.6250, 94.6250, 10.0000, "Ori" },
    { 104.0000, 105.0000, 10.0000, "Gem" },
    { 117.1250, 118.8750, 10.0000, "Cnc" },
    { 357.5000, 360.0000, 10.0000, "Peg" },
    { 25.0000, 49.2500, 9.9167, "Ari" },
    { 302.1250, 304.5000, 8.5000, "Del" },
    { 202.5000, 226.2500, 8.0000, "Boo" },
    { 341.2500, 357.5000, 7.5000, "Peg" },
    { 118.8750, 138.7500, 7.0000, "Cnc" },
    { 138.7500, 161.2500, 7.0000, "Leo" },
    { 273.7500, 279.9333, 6.2500, "Oph" },
    { 279.9333, 283.0000, 6.2500, "Aql" },
    { 312.5000, 313.1250, 6.0000, "Del" },
    { 105.0000, 105.2500, 5.5000, "CMi" },
    { 273.7500, 276.3750, 4.5000, "Ser" },
    { 241.2500, 251.2500, 4.0000, "Her" },
    { 273.7500, 276.3750, 3.0000, "Oph" },
    { 322.0000, 325.0000, 2.7500, "Peg" },
    { 0.0000, 30.0000, 2.0000, "Psc" },
    { 278.7500, 283.0000, 2.0000, "Ser" },
    { 304.5000, 312.5000, 2.0000, "Del" },
	{ 312.5000, 320.0000, 2.0000, "Equ" },
    { 320.0000, 322.0000, 2.0000, "Peg" },
    { 330.0000, 341.2500, 2.0000, "Peg" },
    { 325.0000, 330.0000, 1.7500, "Peg" },
    { 105.2500, 108.0000, 1.5000, "CMi" },
    { 53.7500, 69.2500, 0.0000, "Tau" },
    { 69.2500, 70.0000, 0.0000, "Ori" },
    { 108.0000, 121.2500, 0.0000, "CMi" },
    { 220.0000, 226.2500, 0.0000, "Vir" },
    { 267.5000, 273.7500, 0.0000, "Oph" },
    { 39.7500, 49.2500, -1.7500, "Cet" },
    { 49.2500, 53.7500, -1.7500, "Tau" },
    { 226.2500, 244.0000, -3.2500, "Ser" },
    { 70.0000, 76.2500, -4.0000, "Ori" },
    { 87.5000, 93.6250, -4.0000, "Ori" },
    { 267.5000, 269.5000, -4.0000, "Ser" },
    { 273.7500, 278.7500, -4.0000, "Ser" },
    { 278.7500, 283.0000, -4.0000, "Aql" },
    { 341.2500, 357.5000, -4.0000, "Psc" },
    { 161.2500, 172.7500, -6.0000, "Leo" },
    { 172.7500, 177.5000, -6.0000, "Vir" },
    { 0.0000, 5.0000, -7.0000, "Psc" },
    { 357.5000, 360.0000, -7.0000, "Psc" },
    { 213.7500, 220.0000, -8.0000, "Vir" },
    { 238.7500, 244.0000, -8.0000, "Oph" },
    { 300.0000, 308.0000, -9.0000, "Aql" },
    { 320.0000, 328.0000, -9.0000, "Aqr" },
    { 257.5000, 269.5000, -10.0000, "Oph" },
	{ 87.5000, 121.2500, -11.0000, "Mon" },
    { 73.7500, 76.2500, -11.0000, "Eri" },
    { 76.2500, 87.5000, -11.0000, "Ori" },
    { 121.2500, 125.5000, -11.0000, "Hya" },
    { 143.7500, 161.2500, -11.0000, "Sex" },
    { 177.5000, 192.5000, -11.0000, "Vir" },
    { 263.7500, 265.0000, -11.6667, "Oph" },
    { 283.0000, 300.0000, -12.0333, "Aql" },
    { 72.5000, 73.7500, -14.5000, "Eri" },
    { 308.0000, 320.0000, -15.0000, "Aqr" },
    { 257.5000, 273.7500, -16.0000, "Ser" },
    { 273.7500, 283.0000, -16.0000, "Sct" },
    { 125.5000, 128.7500, -17.0000, "Hya" },
    { 244.0000, 245.6250, -18.2500, "Oph" },
    { 128.7500, 136.2500, -19.0000, "Hya" },
    { 161.2500, 162.5000, -19.0000, "Crt" },
    { 244.0000, 245.6250, -19.2500, "Sco" },
    { 235.0000, 238.7500, -20.0000, "Lib" },
    { 188.7500, 192.5000, -22.0000, "Crv" },
    { 192.5000, 213.7500, -22.0000, "Vir" },
    { 136.2500, 146.2500, -24.0000, "Hya" },
    { 25.0000, 39.7500, -24.3833, "Cet" },
    { 39.7500, 56.2500, -24.3833, "Eri" },
    { 162.5000, 177.5000, -24.5000, "Crt" },
    { 177.5000, 188.7500, -24.5000, "Crv" },
    { 213.7500, 223.7500, -24.5000, "Lib" },
    { 244.0000, 251.2500, -24.5833, "Oph" },
    { 0.0000, 25.0000, -25.5000, "Cet" },
	{ 320.0000, 328.0000, -25.5000, "Cap" },
    { 328.0000, 357.5000, -25.5000, "Aqr" },
    { 357.5000, 360.0000, -25.5000, "Cet" },
    { 146.2500, 153.7500, -26.5000, "Hya" },
    { 70.5000, 72.5000, -27.2500, "Eri" },
    { 72.5000, 91.7500, -27.2500, "Lep" },
    { 300.0000, 320.0000, -28.0000, "Cap" },
    { 153.7500, 158.7500, -29.1667, "Hya" },
    { 188.7500, 223.7500, -29.5000, "Hya" },
    { 223.7500, 235.0000, -29.5000, "Lib" },
    { 235.0000, 240.0000, -29.5000, "Sco" },
    { 68.7500, 70.5000, -30.0000, "Eri" },
    { 251.2500, 264.0000, -30.0000, "Oph" },
    { 264.0000, 267.5000, -30.0000, "Sgr" },
    { 158.7500, 162.5000, -31.1667, "Hya" },
    { 91.7500, 110.5000, -33.0000, "CMa" },
    { 183.7500, 188.7500, -33.0000, "Hya" },
    { 162.5000, 183.7500, -35.0000, "Hya" },
    { 52.5000, 56.2500, -36.0000, "For" },
    { 125.5000, 140.5000, -36.7500, "Pyx" },
    { 64.0000, 68.7500, -37.0000, "Eri" },
    { 267.5000, 287.5000, -37.0000, "Sgr" },
    { 320.0000, 345.0000, -37.0000, "PsA" },
    { 345.0000, 350.0000, -37.0000, "Scl" },
    { 45.0000, 52.5000, -39.5833, "For" },
    { 140.5000, 165.0000, -39.7500, "Ant" },
    { 0.0000, 25.0000, -40.0000, "Scl" },
    { 25.0000, 45.0000, -40.0000, "For" },
	{ 58.0000, 64.0000, -40.0000, "Eri" },
    { 350.0000, 360.0000, -40.0000, "Scl" },
    { 212.5000, 223.7500, -42.0000, "Cen" },
    { 235.0000, 240.0000, -42.0000, "Lup" },
    { 240.0000, 246.3125, -42.0000, "Sco" },
    { 72.5000, 75.0000, -43.0000, "Cae" },
    { 75.0000, 98.7500, -43.0000, "Col" },
    { 120.0000, 125.5000, -43.0000, "Pup" },
    { 51.2500, 58.0000, -44.0000, "Eri" },
    { 246.3125, 267.5000, -45.5000, "Sco" },
    { 267.5000, 287.5000, -45.5000, "CrA" },
    { 287.5000, 305.0000, -45.5000, "Sgr" },
    { 305.0000, 320.0000, -45.5000, "Mic" },
    { 45.0000, 51.2500, -46.0000, "Eri" },
    { 67.5000, 72.5000, -46.5000, "Cae" },
    { 230.0000, 235.0000, -48.0000, "Lup" },
    { 0.0000, 35.0000, -48.1667, "Phe" },
    { 40.0000, 45.0000, -49.0000, "Eri" },
    { 61.2500, 64.0000, -49.0000, "Hor" },
    { 64.0000, 67.5000, -49.0000, "Cae" },
    { 320.0000, 330.0000, -50.0000, "Gru" },
    { 90.0000, 120.0000, -50.7500, "Pup" },
    { 120.0000, 122.5000, -50.7500, "Vel" },
    { 36.2500, 40.0000, -51.0000, "Eri" },
    { 57.5000, 61.2500, -51.0000, "Hor" },
    { 0.0000, 27.5000, -51.5000, "Phe" },
    { 90.0000, 92.5000, -52.5000, "Car" },
    { 122.5000, 126.7500, -53.0000, "Vel" },
	{ 52.5000, 57.5000, -53.1667, "Hor" },
    { 57.5000, 60.0000, -53.1667, "Dor" },
    { 0.0000, 23.7500, -53.5000, "Phe" },
    { 32.5000, 36.2500, -54.0000, "Eri" },
    { 67.5000, 75.0000, -54.0000, "Pic" },
    { 225.7500, 230.0000, -54.0000, "Lup" },
    { 126.7500, 132.5000, -54.5000, "Vel" },
    { 92.5000, 97.5000, -55.0000, "Car" },
    { 177.5000, 192.5000, -55.0000, "Cen" },
    { 212.5000, 225.7500, -55.0000, "Lup" },
    { 225.7500, 230.0000, -55.0000, "Nor" },
    { 60.0000, 65.0000, -56.5000, "Dor" },
    { 132.5000, 165.0000, -56.5000, "Vel" },
    { 165.0000, 168.7500, -56.5000, "Cen" },
    { 262.5000, 270.0000, -57.0000, "Ara" },
    { 270.0000, 305.0000, -57.0000, "Tel" },
    { 330.0000, 350.0000, -57.0000, "Gru" },
    { 48.0000, 52.5000, -57.5000, "Hor" },
    { 75.0000, 82.5000, -57.5000, "Pic" },
    { 97.5000, 102.5000, -58.0000, "Car" },
    { 0.0000, 20.0000, -58.5000, "Phe" },
    { 20.0000, 32.5000, -58.5000, "Eri" },
    { 350.0000, 360.0000, -58.5000, "Phe" },
    { 65.0000, 68.7500, -59.0000, "Dor" },
    { 230.0000, 246.3125, -60.0000, "Nor" },
    { 305.0000, 320.0000, -60.0000, "Ind" },
    { 82.5000, 90.0000, -61.0000, "Pic" },
    { 227.5000, 230.0000, -61.0000, "Cir" },
	{ 246.3125, 248.7500, -61.0000, "Ara" },
    { 223.7500, 227.5000, -63.5833, "Cir" },
    { 248.7500, 251.2500, -63.5833, "Ara" },
    { 90.0000, 102.5000, -64.0000, "Pic" },
    { 102.5000, 135.5000, -64.0000, "Car" },
    { 168.7500, 177.5000, -64.0000, "Cen" },
    { 177.5000, 192.5000, -64.0000, "Cru" },
    { 192.5000, 218.0000, -64.0000, "Cen" },
    { 202.5000, 205.0000, -65.0000, "Cir" },
    { 251.2500, 252.5000, -65.0000, "Ara" },
    { 32.5000, 48.0000, -67.5000, "Hor" },
    { 48.0000, 68.7500, -67.5000, "Ret" },
    { 221.2500, 223.7500, -67.5000, "Cir" },
    { 252.5000, 262.5000, -67.5000, "Ara" },
    { 262.5000, 270.0000, -67.5000, "Pav" },
    { 330.0000, 350.0000, -67.5000, "Tuc" },
    { 68.7500, 98.7500, -70.0000, "Dor" },
    { 205.0000, 221.2500, -70.0000, "Cir" },
    { 221.2500, 255.0000, -70.0000, "TrA" },
    { 0.0000, 20.0000, -75.0000, "Tuc" },
    { 52.5000, 68.7500, -75.0000, "Hyi" },
    { 98.7500, 135.5000, -75.0000, "Vol" },
    { 135.5000, 168.7500, -75.0000, "Car" },
    { 168.7500, 205.0000, -75.0000, "Mus" },
    { 270.0000, 320.0000, -75.0000, "Pav" },
    { 320.0000, 350.0000, -75.0000, "Ind" },
    { 350.0000, 360.0000, -75.0000, "Tuc" },
    { 11.2500, 20.0000, -76.0000, "Tuc" },
	{ 0.0000, 52.5000, -82.5000, "Hyi" },
    { 115.0000, 205.0000, -82.5000, "Cha" },
    { 205.0000, 270.0000, -82.5000, "Aps" },
    { 52.5000, 115.0000, -85.0000, "Men" },
    { 0.0000, 360.0000, -90.0000, "Oct" },
};

/* Gnu plotting utilities way of marking the Zodiacal constellations */
static char zodiac[] = "\
Ari\0\\AR\0\
Tau\0\\TA\0\
Gem\0\\GE\0\
Cnc\0\\CA\0\
Leo\0\\LE\0\
Vir\0\\VI\0\
Lib\0\\LI\0\
Sco\0\\SC\0\
Sgr\0\\SG\0\
Cap\0\\CP\0\
Aqr\0\\AQ\0\
Psc\0\\PI\0\
";

static char format[] = "%8.4f%+08.4f %s\n"; /* Standard format */
static char formap[] = "%8.4f %8.4f\n"; /* Opt. -p format  */

static char usage[] = "\
Usage: constel [-p] {constellation|position_1875_degrees}\n\
  e.g. constel Ant\n\
  or   constel 123.78-45.88\n\
 -p for plotting, e.g.\n\
       constel -p Cyg | graph -T ps -q 1.0 -L Cyg -x 360 0 -y -90 90\n\
";

int main(int argc, char** argv)
/*++++++++++++++++
.PURPOSE  Convert argument
	- into constellation name when it's a position (e.g. 123.45-12.78)
	- into a set of rectangles definining the constellation area
	  when it's a constellation name
.RETURNS  ---
-----------------*/
{
    ROW *pr, *pe, *br;
    float ral, rau, ra, de;
    char *pgm, *p, *form, *z;
    int n;

    /* Argument must be a position or a constellation name */
    pgm = *argv; /* Program name */
    form = format; /* -p option... */
    while (--argc > 0) {
        p = *++argv;
        if (*p == '-')
            switch (p[1]) {
                case 'p':
					form = formap;
                    continue;
                default:
                    fprintf(stderr, "****Invalid option: %s\n", p);
                case 'h': /* Assume Help */
                    fprintf(stderr, "%s", usage);
                    exit(1);
            }
        else
            break;
    }
    if (argc != 1) {
        fprintf(stderr, "%s", usage);
        exit(1);
    }

    pe = data + ITEMS(data); /* End-of-data sentinel */
    if (isalpha(*p)) { /* Must be a constellation */
        for (n = 0, pr = data + 1; pr < pe; pr++) {
            if (strncmp(p, pr->cst, 3))
                continue;
            if ((!n) && (form == formap)) {
                /* Comment = Constellation Name */
                printf("#%s", pr->cst);
                for (z = zodiac; *z && strcmp(pr->cst, z); z += 8)
                    ;
                if (*z)
                    printf(" (%s)", z + 4);
				putchar('\n');
            }
            n++;
            /* Find the surface as a set of rectangles:
	       from the southern boundaries, move northward
	       to match the next boundaries.
	    */
            for (ral = pr->ral; ral < pr->rau; ral = rau) {
                for (br = pr; --br > data;) {
                    if (br->del == pr->del)
                        continue;
                    if (ral < br->ral)
                        continue;
                    if (ral >= br->rau)
                        continue;
                    break;
                }
                rau = br->rau;
                if (rau > pr->rau)
                    rau = pr->rau;

                /* Print out just the low-left, up-right corners
	          printf("  %8.4f %+08.4f  %8.4f %+08.4f\n",
	          ral, pr->del, rau, br->del) ;
	        */
                /* Print the 4 points of the rectangle
		   this allows to represent the constellation
		   as a set of filled rectangles.
		*/
                printf(form, ral, pr->del, pr->cst);
                printf(form, rau, pr->del, pr->cst);
                printf(form, rau, br->del, pr->cst);
                printf(form, ral, br->del, pr->cst);
                if (form == formap)
                    putchar('\n'); /* Extra line between rectangles */
            }
        }
        if (!n)
            fprintf(stderr, "++++Nothing found about: %s\n", p);
    } else { /* From a 1875 Position */
        ra = atof(p);
        while (isdigit(*p) || (*p == '.'))
            p++;
        de = atof(p);
        for (pr = data + 1; pr < pe; pr++) {
            if ((ra >= pr->ral) && (ra < pr->rau) && (de >= pr->del))
                break;
        }
        if (pr < pe)
            p = pr->cst;
        else
            p = "???";
        printf("%8.4f%+08.4f %s\n", ra, de, p);
    }
	exit(0);
}

